using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using APP.QUANLY.Common;
using RMAS.DAL;


namespace RMAS.DAL
{
    public class QT_EXPORTDETAIL_METERIAL_TEMP_Provider
    {
        public IDbConnection dbConnection;
        private string _ErrMsg;
        public string ErrMsg { get { return _ErrMsg; } }
	
        public QT_EXPORTDETAIL_METERIAL_TEMP_Provider()
        {
            dbConnection = StaticVar.ServerConnection;
        }
	
        public QT_EXPORTDETAIL_METERIAL_TEMP_Provider(IDbConnection con)
        {
            dbConnection = con;
        }
		#region Load Table
        /// <summary>
        /// Lấy tất cả QT_EXPORTDETAIL_METERIAL_TEMP trong dữ liệu.
        /// </summary>
        /// <returns></returns>
        public QT_EXPORTDETAIL_METERIAL_TEMPList GetAll()
        {
            QT_EXPORTDETAIL_METERIAL_TEMPList list = null;
            IDbConnection con = dbConnection;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open(); }
                catch{ throw new Exception("Không thể kết nối đến cơ sở dữ liệu");}
                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                list = dao.SelectAll();
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return list;
        }
        /// <summary>
        /// Lấy tất cả QT_EXPORTDETAIL_METERIAL_TEMP trong dữ liệu su dung trans.
        /// </summary>
        /// <returns></returns>
		public QT_EXPORTDETAIL_METERIAL_TEMPList GetAll(IDbTransaction trans)
        {
            QT_EXPORTDETAIL_METERIAL_TEMPList list = null;
            IDbConnection con = dbConnection;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open(); }
                catch{ throw new Exception("Không thể kết nối đến cơ sở dữ liệu");}
                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                list = dao.SelectAll(trans);
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            return list;
        }
		
        /// <summary>
        /// Tìm QT_EXPORTDETAIL_METERIAL_TEMP dựa theo _ID.
        /// </summary>
        /// <param name="_ID"></param>
        /// <returns></returns>
        public QT_EXPORTDETAIL_METERIAL_TEMP GetBy_ID(Int64 ID)
        {
            QT_EXPORTDETAIL_METERIAL_TEMP obj = null;
            IDbConnection con = dbConnection;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				obj = GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(con,ID);
                if (obj == null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP không tồn tại"); }
				else obj.IsExisting = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return obj;
        }

		/// <summary>
        /// Lấy QT_EXPORTDETAIL_METERIAL_TEMP dựa vào _ID, không mở hay đóng Connection. khong co Transaction
        /// </summary>
        /// <param name="_ID"></param>
        /// <returns></returns>
        private QT_EXPORTDETAIL_METERIAL_TEMP GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(IDbConnection con,Int64 ID)
        {
			QT_EXPORTDETAIL_METERIAL_TEMP obj = null;
			try
			{
            	QT_EXPORTDETAIL_METERIAL_TEMPDao DAO = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
            	obj = DAO.SelectByKey(ID);
			}
			catch
			{
				throw new Exception("Không tìm thấy QT_EXPORTDETAIL_METERIAL_TEMP.");
			}
			return obj;
        }
		
		/// <summary>
        /// Tìm QT_EXPORTDETAIL_METERIAL_TEMP dựa theo _ID.
        /// </summary>
        /// <param name="_ID"></param>
        /// <returns></returns>
        public QT_EXPORTDETAIL_METERIAL_TEMP GetBy_ID(IDbTransaction trans,Int64 ID)
        {
            QT_EXPORTDETAIL_METERIAL_TEMP obj = null;
            IDbConnection con = dbConnection;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				obj = GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(con,ID,trans);
                if (obj == null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP không tồn tại"); }
				else obj.IsExisting = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
            }
            return obj;
        }
		/// <summary>
        /// Lấy QT_EXPORTDETAIL_METERIAL_TEMP dựa vào _ID, không mở hay đóng Connection. co Transaction
        /// </summary>
        /// <param name="_ID"></param>
        /// <returns></returns>
		private QT_EXPORTDETAIL_METERIAL_TEMP GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(IDbConnection con,Int64 ID, IDbTransaction trans)
        {
			QT_EXPORTDETAIL_METERIAL_TEMP obj = null;
			try
			{
            			QT_EXPORTDETAIL_METERIAL_TEMPDao DAO = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
            			obj = DAO.SelectByKey(ID, trans);
			}
			catch
			{
				throw new Exception("Không tìm thấy QT_EXPORTDETAIL_METERIAL_TEMP.");
			}
			return obj;
        }
		#endregion
		
		#region /////////////////////////////////Load Cau Lenh SQL Command //////////////////////////////////////
        //--------------------------------------Load List---------------------------------------------------------
         private bool loadList(IDbConnection con, IDbTransaction trans, string commandtext)
         {
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				
				QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                dao.LoadByCommandText(commandtext, trans);
                res = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
                res = false;
            }
            return res;	
        }	
		//----------------------------------Thao Tac Theo Command Text---------------------------------------
        public bool Cmd_LoadByCommandText(IDbTransaction trans,string commandtext)
        {
			bool bKQ = false;
			bKQ = loadList(dbConnection, trans, commandtext);
			if(bKQ) _ErrMsg ="LoadByCommandText  thành công!";
			else  _ErrMsg ="LoadByCommandText  thất bại!";    
			return bKQ;
        }
		#endregion
		
        #region ////////////////////////Thao tác Insert, Update, Delete khong có transaction/////////////////////
        //-------------------------------------Insert_Update-----------------------------------------------------
        private bool Insert_Update(IDbConnection con, QT_EXPORTDETAIL_METERIAL_TEMP obj, bool isInsert)
        {
            QT_EXPORTDETAIL_METERIAL_TEMP obj2 = null;
            IDbTransaction trans = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(con, obj.ID);
				}
				catch{ obj2 = null; }

                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                trans = con.BeginTransaction();
                ///Nếu Insert
                if (isInsert)
                {
                    if (obj2 != null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP này đã tồn tại"); }
					{
                    	dao.Insert(obj, trans);
					}
                }
                ///Nếu Update
                else
                {
                    if (obj2 == null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP này không tồn tại"); }
					{
                    	dao.Update(obj, trans);
					}
                }
                trans.Commit();
                res = true;
			}
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				if(trans!=null)
					trans.Rollback();
                res = false;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return res;
        }

        //----------------------------------Delete---------------------------------
        private bool Delete(IDbConnection con, QT_EXPORTDETAIL_METERIAL_TEMP obj)
        {
            QT_EXPORTDETAIL_METERIAL_TEMP obj2 = null;
            IDbTransaction trans = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(con, obj.ID);
				}
				catch{ obj2 = null; }

                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                trans = con.BeginTransaction();
               	if (obj2 == null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP này không tồn tại"); }
                      dao.Delete(obj, trans);
                trans.Commit();
                res = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				if(trans!=null)
					trans.Rollback();
                res = false;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return res;
        }

        //----------------------------------------Thêm------------------------------------------------------------
        /// <summary>
        /// Thêm QT_EXPORTDETAIL_METERIAL_TEMP mới, dựa vào _ID
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public bool Cmd_ThemQT_EXPORTDETAIL_METERIAL_TEMP(QT_EXPORTDETAIL_METERIAL_TEMP obj)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, obj, true);
			if(bKQ) _ErrMsg ="Thêm QT_EXPORTDETAIL_METERIAL_TEMP thành công!";
			else  _ErrMsg ="Thêm QT_EXPORTDETAIL_METERIAL_TEMP thất bại!";    
            return bKQ; 
        }

        //---------------------------------------------Cập Nhật--------------------------------------------------
        /// <summary>
        /// Cập nhật QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào _ID
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public bool Cmd_CapNhatQT_EXPORTDETAIL_METERIAL_TEMP(QT_EXPORTDETAIL_METERIAL_TEMP obj)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, obj, false);
			if(bKQ) _ErrMsg ="Cập nhật QT_EXPORTDETAIL_METERIAL_TEMP thành công!";
			else  _ErrMsg ="Cập nhật QT_EXPORTDETAIL_METERIAL_TEMP thất bại!";    
            return bKQ;
        }
        //-------------------------------------------Xóa-------------------------------------------------
        /// <summary>
        /// Xóa QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào _ID
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public bool Cmd_XoaQT_EXPORTDETAIL_METERIAL_TEMP(QT_EXPORTDETAIL_METERIAL_TEMP obj)
        {
			bool bKQ = false;
			bKQ = Delete(dbConnection, obj);
			if(bKQ) _ErrMsg ="Xóa QT_EXPORTDETAIL_METERIAL_TEMP thành công!";
			else  _ErrMsg ="Xóa QT_EXPORTDETAIL_METERIAL_TEMP thất bại!";    
            return bKQ;
        }
		#endregion
		
		#region ///////////////////////////////Tim Kiem////////////////////////////////////////////////////////
        //----------------------------------Tìm Kiếm List Theo Điều Kiện---------------------------------------
        /// <summary>
        /// Tìm Kiếm  QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào ConditionForm, co Transaction
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public QT_EXPORTDETAIL_METERIAL_TEMPList SearchListByCondition(QT_EXPORTDETAIL_METERIAL_TEMP _objQT_EXPORTDETAIL_METERIAL_TEMP, IDbTransaction trans)
        {
            IDbConnection con = dbConnection;
            try { if (con.State != ConnectionState.Open)  con.Open();  }
            catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
            QT_EXPORTDETAIL_METERIAL_TEMPList list = new QT_EXPORTDETAIL_METERIAL_TEMPList();
            try
            {
                if (con.State != ConnectionState.Open)  con.Open(); 
                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                list = dao.SelectByCondition(_objQT_EXPORTDETAIL_METERIAL_TEMP, trans);
				if(list.Count==0)
				{
					list = null;
				}
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            return list;
        }
		 /// <summary>
        /// Tìm Kiếm  QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào ConditionForm, khong co Transaction
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
		 public QT_EXPORTDETAIL_METERIAL_TEMPList SearchListByCondition(QT_EXPORTDETAIL_METERIAL_TEMP _objQT_EXPORTDETAIL_METERIAL_TEMP)
        {
            IDbConnection con = dbConnection;
            try { if (con.State != ConnectionState.Open)  con.Open();  }
            catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
            QT_EXPORTDETAIL_METERIAL_TEMPList list = new QT_EXPORTDETAIL_METERIAL_TEMPList();
            try
            {
                if (con.State != ConnectionState.Open)  con.Open(); 
                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                list = dao.SelectByCondition(_objQT_EXPORTDETAIL_METERIAL_TEMP);
				if(list.Count==0)
				{
					list = null;
				}
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            return list;
        }
		
        //----------------------------------Tìm Kiếm Object Theo Điều Kiện---------------------------------------
        /// <summary>
        /// Tìm Kiếm  QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào ConditionForm , co transaction
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public QT_EXPORTDETAIL_METERIAL_TEMP SearchObjectByCondition(QT_EXPORTDETAIL_METERIAL_TEMP _objQT_EXPORTDETAIL_METERIAL_TEMP, IDbTransaction trans)
        {
            IDbConnection con = dbConnection;
            try { if (con.State != ConnectionState.Open)  con.Open();  }
            catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
           QT_EXPORTDETAIL_METERIAL_TEMPList list = new QT_EXPORTDETAIL_METERIAL_TEMPList();
            try
            {
                if (con.State != ConnectionState.Open)  con.Open(); 
                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                list = dao.SelectByCondition(_objQT_EXPORTDETAIL_METERIAL_TEMP,trans);
				if(list.Count==0)
				{
					list = null;
				}
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
	    if(list != null && list[0]!=null) return list[0];
	    else return null;
        }
		
		 /// <summary>
        /// Tìm Kiếm  QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào ConditionForm, khong co transaction
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public QT_EXPORTDETAIL_METERIAL_TEMP SearchObjectByCondition(QT_EXPORTDETAIL_METERIAL_TEMP _objQT_EXPORTDETAIL_METERIAL_TEMP)
        {
            IDbConnection con = dbConnection;
            try { if (con.State != ConnectionState.Open)  con.Open();  }
            catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
           QT_EXPORTDETAIL_METERIAL_TEMPList list = new QT_EXPORTDETAIL_METERIAL_TEMPList();
            try
            {
                if (con.State != ConnectionState.Open)  con.Open(); 
                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                list = dao.SelectByCondition(_objQT_EXPORTDETAIL_METERIAL_TEMP);
				if(list.Count==0)
				{
					list = null;
				}
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
			
			if(list != null && list[0]!=null) return list[0];
			else return null;
        }
		#endregion
		
        #region ///////////////////Thao tác Insert, Update, Delete có transaction////////////////////////////
        private bool Insert_Update(IDbConnection con,  IDbTransaction trans, QT_EXPORTDETAIL_METERIAL_TEMP obj, bool isInsert)
        {
            QT_EXPORTDETAIL_METERIAL_TEMP obj2 = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(con, obj.ID, trans);
				}
				catch{ obj2 = null; }

                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
                ///Nếu Insert
                if (isInsert)
                {
                    if (obj2 != null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP này đã tồn tại"); }
					{
                    	dao.Insert(obj, trans);
					}
                }
                ///Nếu Update
                else
                {
                    if (obj2 == null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP này không tồn tại"); }
					{
                    	dao.Update(obj, trans);
					}
                }
                res = true;
			}
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				res = false;
            }
            return res;
        }

        //----------------------------------Delete---------------------------------
        private bool Delete(IDbConnection con,  IDbTransaction trans, QT_EXPORTDETAIL_METERIAL_TEMP obj)
        {
            QT_EXPORTDETAIL_METERIAL_TEMP obj2 = null;

            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetQT_EXPORTDETAIL_METERIAL_TEMP_NoOpenConnection(con, obj.ID, trans);
				}
				catch{ obj2 = null; }

                QT_EXPORTDETAIL_METERIAL_TEMPDao dao = new QT_EXPORTDETAIL_METERIAL_TEMPDao(con);
               	if (obj2 == null) { throw new Exception("QT_EXPORTDETAIL_METERIAL_TEMP này không tồn tại"); }
                dao.Delete(obj, trans);
                res = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
                res = false;
            }
            return res;
        }
		
        //----------------------------------------Thêm------------------------------------------------------------
        /// <summary>
        /// Thêm QT_EXPORTDETAIL_METERIAL_TEMP mới, dựa vào _ID
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
		/// <param name="IDbTransaction"></param>
        /// <returns></returns>
        public bool Cmd_ThemQT_EXPORTDETAIL_METERIAL_TEMP(QT_EXPORTDETAIL_METERIAL_TEMP obj, IDbTransaction trans)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, trans, obj, true);
			if(bKQ) _ErrMsg ="Thêm QT_EXPORTDETAIL_METERIAL_TEMP thành công!";
			else  _ErrMsg ="Thêm QT_EXPORTDETAIL_METERIAL_TEMP thất bại!";    
            return bKQ; 
        }

        //---------------------------------------------Cập Nhật--------------------------------------------------
        /// <summary>
        /// Cập nhật QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào _ID
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public bool Cmd_CapNhatQT_EXPORTDETAIL_METERIAL_TEMP(QT_EXPORTDETAIL_METERIAL_TEMP obj, IDbTransaction trans)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, trans, obj, false);
			if(bKQ) _ErrMsg ="Cập nhật QT_EXPORTDETAIL_METERIAL_TEMP thành công!";
			else  _ErrMsg ="Cập nhật QT_EXPORTDETAIL_METERIAL_TEMP thất bại!";    
            return bKQ;
        }
        //-------------------------------------------Xóa-------------------------------------------------
        /// <summary>
        /// Xóa QT_EXPORTDETAIL_METERIAL_TEMP, dựa vào _ID
        /// </summary>
        /// <param name="QT_EXPORTDETAIL_METERIAL_TEMP"></param>
        /// <returns></returns>
        public bool Cmd_XoaQT_EXPORTDETAIL_METERIAL_TEMP(QT_EXPORTDETAIL_METERIAL_TEMP obj, IDbTransaction trans)
        {
			bool bKQ = false;
			bKQ = Delete(dbConnection, trans, obj);
			if(bKQ) _ErrMsg ="Xóa QT_EXPORTDETAIL_METERIAL_TEMP thành công!";
			else  _ErrMsg ="Xóa QT_EXPORTDETAIL_METERIAL_TEMP thất bại!";    
            return bKQ;
        }
		#endregion
    }
}